package m2;

import com.rabbitmq.client.*;

import java.io.IOException;

public class Consumer {
    public static void main(String[] args) throws Exception {
        // 连接
        ConnectionFactory f = new ConnectionFactory();
        f.setHost("192.168.64.140");
        f.setPort(5672);   // 默认端口可以不设置
        f.setUsername("admin");
        f.setPassword("admin");
        Channel channel = f.newConnection().createChannel();

        // 定义队列
        channel.queueDeclare("task_queue", true, false, false, null);

        // 创建回调对象
        DeliverCallback deliverCallback = new DeliverCallback() {
            @Override
            public void handle(String consumerTag, Delivery message) throws IOException {
                String msg = new String(message.getBody());
                System.out.println("消费者2已收到消息: "+msg);
                // 遍历字符串,每个点字符暂停1秒
                for (int i = 0; i < msg.length(); i++) {
                    if ('.'==msg.charAt(i)){
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
                channel.basicAck(message.getEnvelope().getDeliveryTag(), false);  // param(回执, 是否把之前接收的所有消息一起都进行确认);
                // 在这里手动发送回执

                System.out.println("--------------消息处理结束--------------");

            }
        };

        CancelCallback cancelCallback = new CancelCallback() {
            @Override
            public void handle(String consumerTag) throws IOException {

            }
        };
        // 每次只抓取一条数据，处理完毕之前不会抓取下一条条（仅手动模式下有效）
        channel.basicQos(1);

        // 消费数据
        // 第二个参数true - 自动确认，自动Ack
        channel.basicConsume("task_queue", false, deliverCallback, cancelCallback);

    }

}
